package kr.co.bettersoft.usedmarketandroid.common;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import kr.co.bettersoft.usedmarketandroid.activity.R;
import kr.co.bettersoft.usedmarketandroid.domain.UsedMarketMember;

import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.net.Uri;
import android.provider.ContactsContract;
import android.util.Log;

/**
 * 어플내에서 공용으로 사용할 메소드들을 모아두는 클래스이다.
 * @author blue
 *
 */
public class CommonUtil {
//	public static Context context;
	
	String TAG = "CommonUtil";
	
	/**
	 * 시간 관련
	 */
	String year = "년";
	String month = "월";
	String day = "일";
	String hour = "시";
	String minute = "분";
	// 현 시각
	public Date today ;
	public SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public SimpleDateFormat sfImg = new SimpleDateFormat("yyyyMMddHHmmss");
	
	public SimpleDateFormat sfGeneral = new SimpleDateFormat("yyyy"+year+" MM"+month+" dd"+day+" a hh"+hour+" mm"+minute);
	public SimpleDateFormat sfGeneral2 = new SimpleDateFormat("yyyy"+year+" MM"+month+" dd"+day+" HH"+hour+" mm"+minute);
	public SimpleDateFormat sfGeneralChat = new SimpleDateFormat("MM"+month+" dd"+day+" a hh"+hour+" mm"+minute);
	

	//	public static SimpleDateFormat sfKr = new SimpleDateFormat("yyyy년 MM월 dd일 a hh시 mm분");
	//	public static SimpleDateFormat sfKr2 = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분");
	//	public static SimpleDateFormat sfKrChat = new SimpleDateFormat("MM월 dd일 a hh시 mm분");

	//	public String year = "";	//	context.getResources().getString(R.string.year);
	//	public String month = "";	//	context.getResources().getString(R.string.month);
	//	public String day = "";	//	context.getResources().getString(R.string.day);
	//	public String hour = "";	//	context.getResources().getString(R.string.hour);
	//	public String minute = "";	//	context.getResources().getString(R.string.minute);
	//	public SimpleDateFormat sfGeneral = new SimpleDateFormat("yyyy"+year+" MM"+month+" dd"+day+" a hh"+hour+" mm"+minute);
	//	public SimpleDateFormat sfGeneral2 = new SimpleDateFormat("yyyy"+year+" MM"+month+" dd"+day+" HH"+hour+" mm"+minute);
	//	public SimpleDateFormat sfGeneralChat = new SimpleDateFormat("MM"+month+" dd"+day+" a hh"+hour+" mm"+minute);

	public String nowDate;
	String nowTime = "";	// 현시각

	// 현시각
	public String getNowDate(){
		today = new Date();
		nowDate = sf.format(today);
		return nowDate;
	}
	
	
	
	
	/**
	 * 이미지 처리
	 * @return
	 */
	
	// 이미지 파일명
	public String getNowDateForImage(){
		today = new Date();
		nowDate = sfImg.format(today);
		return nowDate;
	}

	/**
	 * Bitmap이미지의 가로, 세로 사이즈를 리사이징 한다.
	 * 
	 * @param source 원본 Bitmap 객체
	 * @param maxResolution 제한 해상도
	 * @return 리사이즈된 이미지 Bitmap 객체
	 */
	public Bitmap resizeBitmapImage(Bitmap source, int maxWidth, int maxHeight)		// maxWidth 800 maxHeight 600
	{
		int width = source.getWidth();
		int height = source.getHeight();

		Bitmap resizedBitmapImage;

		if(width > height){		// 너비가 더 크면 800 * 600
			resizedBitmapImage = Bitmap.createScaledBitmap(source, maxWidth, maxHeight, true);
		}else{	// 높이가 더 크면 600 * 800
			resizedBitmapImage = Bitmap.createScaledBitmap(source, maxHeight, maxWidth, true);
		}
		return resizedBitmapImage;
	}

	/**
	 * 이미지 라운딩 처리하기
	 * @param bitmap
	 * @return
	 */
	public Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
		Log.d(TAG,"getRoundedCornerBitmap");
		Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
				bitmap.getHeight(), Config.ARGB_8888); 
		Canvas canvas = new Canvas(output);
		final int color = 0xff424242; 
		final Paint paint = new Paint(); 
		final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
		final RectF rectF = new RectF(rect); 
		final float roundPx = 8; 
		paint.setAntiAlias(true); 
		canvas.drawARGB(0, 0, 0, 0); 
		paint.setColor(color); 
		canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
		canvas.drawBitmap(bitmap, rect, rect, paint); 
		return output; 
	} 



	/**
	 * 전화번호 표시 처리
	 */
	// 일반 번호 나열에 "-" 를 넣어서 출력
	public String phoneNumForShow(String orgPhoneNum){
		String returnStr = "";
		if(orgPhoneNum.length()==10){
			returnStr = orgPhoneNum.substring(0, 3) + "-" + orgPhoneNum.substring(3, 6) + "-" + orgPhoneNum.substring(6);  
		}else if(orgPhoneNum.length()==11){
			returnStr = orgPhoneNum.substring(0, 3) + "-" + orgPhoneNum.substring(3, 7) + "-" + orgPhoneNum.substring(7);  
		}else if(orgPhoneNum.length()==9){
			returnStr = orgPhoneNum.substring(0, 2) + "-" + orgPhoneNum.substring(2, 5) + "-" + orgPhoneNum.substring(5);  
		}else{
			returnStr = orgPhoneNum;
		}
		return returnStr;
	}
//  /**
//  * 전번 출력시 - 를 넣어서 출력
//  * @param phoneNumberOrg
//  * @return
//  */
// public String phoneNumberForShowFormat(String phoneNumberOrg){
//	   String returnPhoneNumber = "";
//	   
//	   if(phoneNumberOrg.length()==10){
//		   returnPhoneNumber = phoneNumberOrg.substring(0, 3) + "-" + phoneNumberOrg.substring(3,6) + "-" + phoneNumberOrg.substring(6);		// (7번째 이후)
//	   }else if(phoneNumberOrg.length()==11){
//		   returnPhoneNumber = phoneNumberOrg.substring(0, 3) + "-" + phoneNumberOrg.substring(3,7) + "-" + phoneNumberOrg.substring(7);		// (8번째 이후)
//	   }else{
//		   returnPhoneNumber = phoneNumberOrg;
//	   }
//	   return returnPhoneNumber;
// }
	// "-" 가 붙어있는 문자열에서 "-" 를 제거하고 출력
	public String phoneNumRemoveDash(String orgPhoneNum){
		String returnStr = orgPhoneNum.replaceAll("-", "");
		return returnStr;
	}
	
	
   /**
    * 전번
    */
	// 전화번호부에 있는 전화번호 리스트 받아오기. 출력용 - 010-1234-5678
	public ArrayList<UsedMarketMember> selectPhoneBookAddressForShow(Context context){

		ArrayList<UsedMarketMember> usedMarketMembers = new ArrayList<UsedMarketMember>();

		Uri ContactsUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

		//타입은 이 전화번호가 집번호인지 핸드폰번호인지 기타번호인지를 파악해주기 위한 column이다.
		String disName = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
		String number = ContactsContract.CommonDataKinds.Phone.NUMBER;
		String type = ContactsContract.CommonDataKinds.Phone.TYPE;

		// 주소록을 가져오기 위한 쿼리문을 날리고 커서를 리턴 받는다.
		Cursor cursor = context.getContentResolver().query(ContactsUri, new String[]{disName, number, type}, null, null, disName);

		//	Cursor에서 값을 받는다
		if(cursor != null){
			cursor.moveToFirst();
			while(!cursor.isAfterLast()){	
				String name = cursor.getString(0);
				String phone = cursor.getString(1);
				String phoneType = cursor.getString(2);
				if(phone.contains("+821")){
					phone = phone.replace("+821", "01");	
				}
				phone = phone.replace("-", "");	
				// 01 로시작하는 번호만.
				if(phone.startsWith("01") && phoneType.equals(Integer.toString(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE))){		// 휴대전화 번호 타입

					// 출력용으로 변환
					phone = phoneNumForShow(phone);
					
					UsedMarketMember usedMarketMember = new UsedMarketMember();
					usedMarketMember.setPhoneBookName(name);
					usedMarketMember.setPhoneNumber(phone);
					usedMarketMembers.add(usedMarketMember);
				}

				cursor.moveToNext();
			}
			cursor.close();
			Log.d(TAG,"usedMarketMembers::"+usedMarketMembers.size());
		}
		return usedMarketMembers;
	}
	
	
	/**
	 * 이메일 유효성 검사
	 * @param email
	 * @return
	 */
	public boolean isValidEmail(String email) {
        Pattern p = Pattern.compile("^(?:\\w+\\.?)*\\w+@(?:\\w+\\.)+\\w+$");
        Matcher m = p.matcher(email);
        return m.matches();
    }
	
}
